﻿using System;
using System.Collections.Generic;
using System.Drawing;
using TestesFixacao.Dominio.Modelos;
using TestesFixacao.WindowsApp.Refatorado.Controls.Shared;

namespace TestesFixacao.WindowsApp.Refatorado.Controls.MateriaForms
{
    public partial class MateriaDialog : BaseDialog
    {
        private Materia _materia;

        public MateriaDialog(List<Disciplina> disciplinas, List<Serie> series, string descricao)
        {
            InitializeComponent();

            if (disciplinas == null)
                throw new ArgumentNullException("disciplinas", "Disciplinas não pode ser nulo");

            if (disciplinas.Count == 0)
                throw new ArgumentOutOfRangeException("disciplinas", "0", "Deverá ter no mínimo uma teste");

            if (string.IsNullOrEmpty(descricao))
                throw new ArgumentNullException("descricao");

            DescricaoTela = descricao;

            RegistraControles(txtNumero, txtNome, cmbDisciplina, cmbSerie);

            base.RedimensionaJanela(new Size(Size.Width, Size.Height - 100));

            cmbDisciplina.Items.OverrideAll(disciplinas);
            cmbSerie.Items.OverrideAll(series);
        }

        public Materia Materia
        {
            get { return _materia; }

            set
            {
                _configurando = true;
                _materia = value;

                txtNumero.Text = _materia.Numero.ToString();
                txtNome.Text = _materia.Nome;
                cmbDisciplina.SelectedItem = _materia.Disciplina;
                cmbSerie.SelectedItem = _materia.Serie;

                _configurando = false;

                DoOperation();
            }
        }

        protected override void DoOperation()
        {
            if (_configurando)
                return;

            _materia.Numero = int.Parse(txtNumero.Text);
            _materia.Nome = txtNome.Text;
            _materia.Disciplina = cmbDisciplina.SelectedItem as Disciplina;

            _materia.Serie = cmbSerie.SelectedItem as Serie;

            try
            {
                _materia.Valida();

                Main.Instance.ShowMessageInFooter("A matéria já pode ser gravada");

                HabilitaBotaoOk();
            }
            catch (Exception ex)
            {
                DesabilitaBotaoOk();
                Main.Instance.ShowMessageInFooter(ex.Message);
            }
        }
    }
}